package com.itheima.reggie.web.controller;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.itheima.reggie.entity.ShoppingCart;
import com.itheima.reggie.service.ShoppingCartService;
import com.itheima.reggie.utils.ThreadLocalUtil;
import com.itheima.reggie.web.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 购物车
 */
@Slf4j
@RestController
@RequestMapping("/shoppingCart")
public class ShoppingCartController {
    @Autowired
    private ShoppingCartService shoppingCartService;

    /**
     * 加入购物车，如果购物车中已有该菜品/套餐，数量+1
     *
     * @param shoppingCart 购物车向（可以是一个菜品，也可以是套餐）
     * @return 加入后的购物车向对象
     */
    @PostMapping("/add")
    public R<ShoppingCart> add(@RequestBody ShoppingCart shoppingCart) {
        // 记录日志
        log.info("加入购物车，购物车项为：[ {} ]", shoppingCart);

        // 参数校验（Dto + 校验框架自动校验）

        // 调用service，返回数据
        return shoppingCartService.add(shoppingCart);

    }


    /**
     * 查询购物车，有隐含条件：userId
     *
     * @return 当前登录用户的所有购物车项
     */
    @GetMapping("/list")
    public R<List<ShoppingCart>> list() {
        // 记录日志
        log.info("查看购物车，当前登录用户id为：[{}]", ThreadLocalUtil.getCurrentId());

        // 调用service查询，并返回数据
        return shoppingCartService.listByUserId();
    }


    /**
     * 清空当前登录用户的购物车，隐含条件：userId
     *
     * @return 是否清空成功
     */
    @DeleteMapping("/clean")
    public R clean() {
        // 记录日志
        Long userId = ThreadLocalUtil.getCurrentId();
        log.info("清空购物车，当前用户Id为：[ {} ]", userId);

        // 调用清空购物车，根据userId删除购物车项
        boolean result = shoppingCartService.remove(Wrappers.lambdaQuery(ShoppingCart.class).eq(ShoppingCart::getUserId, userId));

        // 组织数据并返回
        if (result) {
            return R.success("清空购物车成功！",null);
        }
        return R.fail("清空购物车失败");
    }

}
